//1.初始化axios实例
//2.请求拦截器，如果也有token进行头部携带
//3.响应拦截器：1、剥离无效数据  2、处理token失效
//4.导出一个函数，调用当前的axios实例请求，返回值promise

import axios from 'axios'
import store from '@/store'
// import store from '@/router'
import router from '@/router'

//导出基准地址，原因：其他地方不是通过axios发请求的地方的用上基准地址
export const baseURL='http://pcapi-xiaotuxian-front-devtest.itheima.net/'
const instance=axios.create({
    //axios的有一些配置,baseURL  timeout
    baseURL,
    timeout:5000
})

instance.interceptors.request.use(config=>{
    //拦截业务逻辑
    //进行请求配置的修改
    //如果本地有token就在头部携带
    //1.获取用户信息对象
    const {profile}=store.state.user
    //2.判断是否token
    console.log(profile.token);
    if(profile.token){
        //3.设置token
        config.headers.Authorization=`Bearer ${profile.token}`
    }
    return config
},err => {
    return Promise.reject(err)
})


//res => res.data 取出data数据，将来调用接口的时候直接拿到的就是后台的数据
instance.interceptors.response.use(res=>res.data,err=>{
    //401状态码，进入该函数
    if(err.response && err.response.status===401){
        //1.清空无效用户信息
        store.commit('user/setUser',{})
        //2.跳转到登录页面
        const fullPath=encodeURIComponent(router.currentRoute.value.fullPath)
        // encodeURIComponent 转换url编码，防止解析地址出问题
        router.push('/login?redirectUrl=' + fullPath)
        //3.跳转需要也要传参（当前路由地址）给登录页面

    }
    return Promise.reject(err)
})


//请求工具函数
export default(url,method,submitData)=>{
    //负责发请求：url（请求地址），method（请求方式）,submitData（提交的数据）
    return instance({
        url,
        method,
        //1.如果是get请求，需要使用params来传递submitData
        //2.如果不是get请求，需要使用data来传递submitData
        //[] 设置一个动态的key，写js表达式，js表达式的执行结果当做KEY
        //method参数：get,Get,GET  转换成消息再来判断
        [method.toLowerCase()==='get' ? 'params' : 'data']:submitData
    })
}
